package com.cn.ss.processor;

import org.smartboot.socket.MessageProcessor;
import org.smartboot.socket.StateMachineEnum;
import org.smartboot.socket.transport.AioSession;

import java.io.IOException;

/**
 * Created by chenyuncong on 2019/3/26.
 */
public class IntegerServerProcessor implements MessageProcessor<Integer> {
    @Override
    public void process(AioSession<Integer> session, Integer msg) {
        Integer respMsg = msg + 1;
        System.out.println("接受到客户端数据：" + msg + " ,响应数据:" + (respMsg));
        try {
            session.write(respMsg);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void stateEvent(AioSession<Integer> session, StateMachineEnum stateMachineEnum, Throwable throwable) {
        switch (stateMachineEnum){
            case NEW_SESSION://网络连接建立时触发，连接建立时会构建传输层的AioSession，如果业务层面也需要维护一个会话，可在此状态机中处理
                break;
            case INPUT_SHUTDOWN://数据读取完毕时触发，即传统意义中的read()==-1
                break;
            case INPUT_EXCEPTION://读数据过程中发生异常时触发此状态机
                break;
            case OUTPUT_EXCEPTION://写数据过程中发生异常时触发此状态机
                break;
            case SESSION_CLOSING://触发了AioSession.close方法，但由于当前AioSession还有未完成的事件，会进入SESSION_CLOSING状态
                break;
            case SESSION_CLOSED://AioSesson完成close操作后触发此状态机
                break;
            case PROCESS_EXCEPTION://业务处理异常
                break;
            case RELEASE_FLOW_LIMIT: //释放流控,仅服务端有效
                break;
            case FLOW_LIMIT: //流控,仅服务端有效
                break;
            default:
                System.out.println("");
        }
    }
}
